package br.com.werp.regras.geral.integracao;

import java.sql.Connection;
import java.util.List;
import java.util.ResourceBundle;

import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.vos.tabelas.Fisica;
import br.com.werp.regras.geral.vos.tabelas.Juridica;
import br.com.werp.regras.geral.vos.tabelas.Pessoa;


/**
 * @author Sobreira
 * Criado em 06/12/2004
 *
 */
public class PessoaDAO extends MasterDAO {
    private static PessoaDAO pessoaDAO;

    /**
     * @param banco
     * @throws Exception
     */
    public PessoaDAO(String banco) throws Exception {
        super(banco);
    }

    public static PessoaDAO getPessoaDAO() throws Exception {
        if (pessoaDAO == null) {
            ResourceBundle bundle = ResourceBundle.getBundle(Constantes.CONFIG);
            pessoaDAO = new PessoaDAO(bundle.getString(Constantes.BANCO));
        }

        return pessoaDAO;
    }

    public Pessoa obterPessoa(String pessoaId) throws Exception {
        Connection conn = null;

        try {
            conn = getConexao();

            List pessoa =
                preencheVO(conn, new Pessoa(), " pess_id = " + pessoaId);

            if (pessoa.isEmpty()) {
                return null;
            }

            return (Pessoa) pessoa.get(0);
        } catch (Exception e) {
            throw e;
        } finally {
            liberaConeccao(conn);
        }
    }

    /**
     * @param string
     * @return
     * @throws Exception
     */
    public Fisica obterFisica(String pess_id) throws Exception {
        return obterFisica(getConexao(), pess_id);
    }

    public Fisica obterFisica(Connection conexao, String pess_id)
        throws Exception {
        Connection conn = null;

        try {
            conn = (Connection) conexao;

            List l =
                preencheVO(conn, new Fisica(), " fisc_pessoa = " + pess_id);

            if (l.isEmpty()) {
                return null;
            }

            return (Fisica) l.get(0);
        } catch (Exception e) {
            throw e;
        } finally {
            if (conn.getAutoCommit()) {
                liberaConeccao(conn);
            }
        }
    }

    public Juridica obterJuridica(String JuridicaId) throws Exception {
        return obterJuridica(getConexao(), JuridicaId);
    }

    public Juridica obterJuridica(Connection conexao, String JuridicaId)
        throws Exception {
        Connection conn = null;

        try {
            conn = (Connection) conexao;

            List l =
                preencheVO(conn, new Juridica(), " juri_pessoa = " +
                    JuridicaId);

            if (l.isEmpty()) {
                return null;
            }

            return (Juridica) l.get(0);
        } catch (Exception e) {
            throw e;
        } finally {
            if (conn.getAutoCommit()) {
                liberaConeccao(conn);
            }
        }
    }

    public List obterPessoa(Pessoa pessoa) throws Exception {
        Connection connection = getConexao();

        try {
            return pesquisarVO(connection, pessoa);
        } finally {
            liberaConeccao(connection);
        }
    }


}
